package com.ms.test10;

import java.util.Random;

/**
 * 关于多态：
 *  父类或者接口类型的引用 指向子类或者接口实现类的对象；
 *
 *  多态是个运行时的行为，不是编译时的行为； generate方法实例；
 *
 *  Java中通过方法重写，方法重载来实现多态；这种说法是错误的，只有重写是实现了多态，
 *  多态只是一种继承或者实现的关系；
 *
 * @author carter
 * create time    2018-08-20
 */
public class TestPoly {

    public Parent generate()
    {
        int i = new Random().nextInt(3);

        switch (i)
        {
            case 0: return new Child();
            case 1: return new ChildAA();
            case 2: return new ChildBB();
        }

        return null;
    }

    public static void main(String[] args) {
        Parent parent = new Child();
        parent.doSomething();//child
        //parent.doSomething2(); 访问不了

        System.out.println("========================");
        IParent iParent = new ChildImpl();
        iParent.doSomething();

        System.out.println("========================");
        TestPoly testPoly = new TestPoly();
        Parent generate = testPoly.generate();
        generate.doSomething();


    }

}

class Parent{

    public void doSomething()
    {
        System.out.println(" parent");
    }

}
class Child extends Parent {

    @Override
    public void doSomething() {
        System.out.println(" child ");
    }

//    public void doSomething2()
//    {
//        System.out.println("do something2");
//    }

}

class ChildAA extends Parent {

    @Override
    public void doSomething() {
        System.out.println(" childAA ");
    }

}
class ChildBB extends Parent {

    @Override
    public void doSomething() {
        System.out.println(" childBB ");
    }

}


interface  IParent{
    void doSomething();
}

class ChildImpl implements IParent{

    @Override
    public void doSomething() {
        System.out.println(" ChildImpl doSomething ");
    }
}

